<?php
/*Создает сайт в виде рабочего стола
Автор: Andrew Shapovalov
Созданно: 02.02.2010
Обновленно:
*/

//Класс создания окна для сайта
class SHAV_DesktopWindow
{
	var $title = '';				//Заголовок окна
	var $content = '';				//Содержимое окна
	var $icon = '';					//Иконка для окна
	var $idCssClass = '';			//id окна, для связи с панелью и создания ссылок на это окно
	var $idCssClassIcon = '';		//id иконки на рабочем столе
	var $leftPanel = '';			//Содержимое левой панели окна
	var $bottomPanel = '';			//Нижняя панель окна

	//Конструктор
	function SHAV_DesktopWindow()
	{
	}

	/*Создает окно из массива параметров
	ПАРАМЕТРЫ:
		$array = array('title'=>'', 'content'=>'', 'icon'=>'', 'idCssClass'=>'','idCssClassIcon'=>'', 'leftPanel'=>'', 'bottom'=>'');
	РЕЗУЛЬТАТ:
		Объект с параметрами из массива.*/
	function createFromArray($array)
	{
		$this->title = $array['title'];
		$this->content = $array['content'];
		$this->icon = $array['icon'];
		$this->idCssClass = $array['idCssClass'];
		$this->idCssClassIcon = $array['idCssClassIcon'];
		$this->leftPanel = $array['leftPanel'];
		$this->bottomPanel = $array['bottom'];
	}

	/*Выводит HTML код окна
	ПАРАМЕТРЫ:
		$isDraw - выводить или вернуть HTML-код;
	РЕЗУЛЬТАТ:
		Выведет или вернет HTML-код*/
	function drawWindow($isDraw = false)
	{
		$content  = '<div id="'.$this->idCssClass.'" class="abs window">';
		$content .= '<div class="abs window_inner">';
		$content .= '<div class="window_top">';
		$content .= '<span class="float_left">';
		$content .= '<img src="'.$this->icon.'" />'.$this->title;
		$content .= '</span>';
		$content .= '<span class="float_right">';
		$content .= '<a href="#" class="window_min"></a>';
		$content .= '<a href="#" class="window_resize"></a>';
		$content .= '<a href="'.$this->idCssClassIcon.'" class="window_close"></a>';
		$content .= '</span>';
		$content .= '</div>';
		$content .= '<div class="abs window_content">';
		$content .= '<div class="window_aside">'.$this->leftPanel.'</div>';
//		$content .= '<div class="window_main"><table class="data"><tr><td>'.$this->content.'</td></tr></table></div>';
		$content .= '<div class="window_main">'.$this->content.'</div>';
		$content .= '</div>';
		$content .= '<div class="abs window_bottom">'.$this->bottomPanel.'</div>';
		$content .= '</div>';
		$content .= '<span class="abs ui-resizable-handle ui-resizable-se"></span>';
		$content .= '</div>';

		if($isDraw == true)
			echo $content;
		else
			return $content;
	}
}

//Класс для Dock панели сайта
class SHAV_DockIcon
{
	var $idCssClass = '';		//id окна, для которого делается иконка на панели (<имя_иконки>)
	var $url = '';				//Ссылка на окно (#<имя_окна>)
	var $icon = '';				//Иконка (ссылка на картинку)
	var $title = '';			//Подпись окна.

	/*Создание Dock панели для сайта
	ПАРАМТЕРЫ:
		$cssClass - id окна, для которого делается иконка на панели (<имя_иконки>);
		$url - Ссылка на окно (#<имя_окна>);
		$icon - Иконка (ссылка на картинку);
		$title - Подпись окна.
	РЕЗУЛЬТАТ:
		Объект класса*/
	function SHAV_DockIcon($cssClass, $url, $icon, $title)
	{
		$this->idCssClass = $cssClass;
		$this->url = $url;
		$this->icon = $icon;
		$this->title = $title;
		
	}
	
	/*Вывод панели для сайта
	ПАРАМЕТРЫ:
		$isDraw - выводить или вернуть HTML-код;
	РЕЗУЛЬТАТ:
		Выведет или вернет HTML-код*/
	function drawPanel($isDraw = false)
	{
		$content = '<li id="'.$this->idCssClass.'"><a href="'.$this->url.'"><img src="'.$this->icon.'">'.$this->title.'</a></li>';
		
		if($isDraw == true)
			echo $content;
		else
			return $content;
	}
}

//Класс системной панели
class SHAV_SystemPanel
{
	var $icon = '';					//Иконка кнопки "Свернуть"
	var $title = '';				//Подпись иконки
	var $dockIcons = array();		//Массив иконок для окон, которые могут быть запущенны.

	/*Конструктор для создания системной панели
	ПАРАМЕТРЫ:
		$titlePanel - заголовок панели;
		$dockIconsArr - массив всех окон, которые будут на ней выводится при открытии;
		$iconPanel - иконка панели.
	РЕЗУЛЬТАТ:
		Создает объект данного коласса на основе переданных параметров*/
	function SHAV_SystemPanel($titlePanel, $dockIconsArr, $iconPanel = '')
	{
		$this->title = $titlePanel;
		$this->dockIcons = $dockIconsArr;
		$this->icon = $iconPanel;
	}

	/*Вывод панели
	ПАРАМЕТРЫ:
		$isDraw - выводить или вернуть HTML-код;
	РЕЗУЛЬТАТ:
		Выведет или вернет HTML-код*/
	function drawPanel($isDraw = false)
	{
		$content  = '<div class="abs" id="bar_bottom">';
		$content .= '<a class="float_left" href="#" id="show_desktop" title="'.$this->title.'"><img src="'.$this->icon.'" /></a>';
		$content .= '<ul id="dock">';
		foreach($this->dockIcons as $icon)
			$content .= $icon->drawPanel();
		$content .= '<a class="float_right" href="http://lmwshav.org.ua/" title="SHAV Software">SHAV Software</a>';
		$content .= '</ul></div>';
		
		if($isDraw == true)
			echo $content;
		else
			return $content;
	}
}

//Класс верхней панели
class SHAV_TopBar
{
	var $menus = array(array('title'=>'', 'sub_menus'=>array(array('url'=>'', 'text'=>''))));

	//Создает объект верхней панели с меню из массива пунктов меню
	function SHAV_TopBar($menusArr = array())
	{
		$this->menus = $menusArr;
	}

	/*Создать меню из объектов SHAV_Menu
	ПАРАМЕТРЫ:
		$name_menu - Название пункта меню;
		$menu - Массив объектов меню.
	РЕЗУЛЬТАТ:
		Добавляет пункт с данными из таблицы базы. При этом используются только странички верхнего уровня*/
	function createFromMenuClass($name_menu, $menu)
	{
		$subMenuArray = array();
		foreach($menu->items as $rec)
		{
			$subMenuArray[] = array('url'=>$rec->lickItem, 'text'=>$rec->titleItem);
		}
		
		$this->menus[] = array('title'=>$name_menu, 'sub_menus'=>$subMenuArray);
	}

	/*Вывод панели
	ПАРАМЕТРЫ:
		$isDraw - выводить или вернуть HTML-код;
	РЕЗУЛЬТАТ:
		Выведет или вернет HTML-код*/
	function drawPanel($isDraw = false)
	{
		$content  = '<div class="abs" id="bar_top">';
		$content .= '<span class="float_right" id="clock"></span>';
		$content .= '<ul>';
		foreach($this->menus as $rec)
		{
			$content .= '<li><a class="menu_trigger" href="#">'.$rec['title'].'</a><ul class="menu">';
			foreach($rec['sub_menus'] as $menu)
			{
				$content .= '<li><a href="'.$menu['url'].'">'.$menu['text'].'</a></li>';
			}
			$content .= '</ul></li>';
		}
		$content .= '</ul>';
		$content .= '</div>';
		
		if($isDraw == true)
			echo $content;
		else
			return $content;
	}
}

//Класс для создания иконок на рабочем столе сайта
class SHAV_DesktopIcon
{
	var $icon = '';			//Иконка ярлыка
	var $style = '';		//Стиль иконки (пока это просто позиция left:20px;top:20px;)
	var $title = '';		//Заголовок ярлыка
	var $url = '';			//Ссылка на страничку (внешняя или внутреняя)

	/*Конструктор класса. Создает объект класса с заданными параметрами
	ПАРАМЕТРЫ:
		$cTitle - Заголовок ярлыка;
		$cIcon - Иконка ярлыка;
		$cStyle - Стиль иконки (пока это просто позиция left:20px;top:20px;);
		$cUrl - Ссылка на страничку (внешняя или внутреняя).
	РЕЗУЛЬТАТ:
		Объект с заданными параметрами*/
	function SHAV_DesktopIcon($cTitle, $cIcon, $cStyle, $cUrl)
	{
		$this->title = $cTitle;
		$this->icon = $cIcon;
		$this->style = $cStyle;
		$this->url = $cUrl;
	}

	/*Вывод панели
	ПАРАМЕТРЫ:
		$isDraw - выводить или вернуть HTML-код;
	РЕЗУЛЬТАТ:
		Выведет или вернет HTML-код*/
	function drawIcon($isDraw = false)
	{
		$content = '<a class="abs icon" style="'.$this->style.'" href="'.$this->url.'"><img src="'.$this->icon.'" />'.$this->title.'</a>';

		if($isDraw == true)
			echo $content;
		else
			return $content;
	}
}

//Класс для создания сайта
class SHAV_Desktop
{
	var $windows = array();				//Массив окон в сайте
	var $windowsOnDock = array();		//Массив окон, которые выводятся в док панели
	var $icons = array();				//Массив иконок (функций) на рабочем столе сайта
	var $titleSite = '';				//Заголовок сайта в окне браузера
	var $description = '';				//Описание сайта для поиска
	var $metas = array();				//Массив дополнительных тегов
	var $cssArray = array();			//Массив дополнительных стилей
	var $jsArray = array();				//Массив дополнительных JavaScript
	var $topPanel = '';					//Верхняя панель с меню
	var $systemPanel = '';				//Системная панель
	
	//Конструктор класса
	function SHAV_Desktop()
	{
	}

	/*Выводит сайт
	ПАРАМЕТРЫ:
		$isDraw - выводить или вернуть HTML-код;
	РЕЗУЛЬТАТ:
		Выведет или вернет HTML-код*/
	function drawSite($isDraw = false)
	{
		$content  = '<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8" />';
		$content .= '<meta name="description" content="'.$this->description.'" />';

		//Выводим дополнительные мета-теги
		foreach($this->metas as $rec)
			$content .= '<meta name="'.$rec['name'].'" content="'.$rec['content'].'" />';

		$content .= '<title>'.$this->titleSite.'</title>';
		$content .= '<link rel="stylesheet" href="/desktop/stylesheets/html.css" />';
		$content .= '<link rel="stylesheet" href="/desktop/stylesheets/desktop.css" />';

		//Выводим дополнительные css стили подключаемые из файлов
		foreach($this->cssArray as $css)
			$content .= '<link rel="stylesheet" href="'.$css.'" />';

		foreach($this->jsArray as $js)
		{
			$firstLetter = substr($js, 0, 1);
			if($firstLetter == '/')
				$js = substr($js, 1);
			
			if(!is_file($js))
				$content .= $js;
			else
				$content .= '<script src="'.$js.'"></script>';
		}
		
		$content .= '<!--[if gte IE 7]><link rel="stylesheet" href="/desktop/stylesheets/ie.css" /><![endif]-->';
		$content .= '</head><body><div class="abs" id="desktop">';
		//Создаем иконки на рабочем столе.
		foreach($this->icons as $rec)
			$content .= $rec->drawIcon();
		
		//Создаем окна для иконок.
		foreach($this->windows as $rec)
			$content .= $rec->drawWindow();
		
		$content .= '</div>';
		//Создаем верхнюю панель
		$content .= $this->topPanel->drawPanel();
		
		//Создаем нижнюю панель
		$content .= $this->systemPanel->drawPanel();
		$content .= '<script src="/desktop/js/jquery.package.js"></script><script src="/desktop/js/jquery.desktop.js"></script><script>JQD.init_desktop();</script>';
		$content .= '</body></html>';

		if($isDraw == true)
			echo $content;
		else
			return $content;
	}
}
?>